home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / swingall.jar / javax / swing / SystemEventQueueUtilities$RunnableCanvas.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-07-15  |  4.6 KB  |  231 lines

  1. package javax.swing;
  2.  
  3. import java.awt.Canvas;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Dimension;
  7. import java.awt.Graphics;
  8. import java.util.Enumeration;
  9. import java.util.Hashtable;
  10. import java.util.Vector;
  11.  
  12. class SystemEventQueueUtilities$RunnableCanvas extends Canvas {
  13.    private static final Graphics nullGraphics = new SystemEventQueueUtilities.RunnableCanvasGraphics();
  14.    private static Hashtable runnableCanvasTable = new Hashtable(1);
  15.    private Vector runnableEvents = new Vector(2);
  16.    private boolean isRegistered = false;
  17.  
  18.    SystemEventQueueUtilities$RunnableCanvas(JRootPane var1) {
  19.       ((Component)this).setBounds(0, 0, 1, 1);
  20.       if (runnableCanvasTable.get(Thread.currentThread()) == null) {
  21.          try {
  22.             runnableCanvasTable.put(Thread.currentThread(), this);
  23.             runnableCanvasTable.put(SystemEventQueueUtilities.access$2(), this);
  24.             if (SwingUtilities.isEventDispatchThread()) {
  25.                this.isRegistered = true;
  26.             }
  27.          } catch (Exception var3) {
  28.             System.err.println("Can't register RunnableCanvas");
  29.             ((Throwable)var3).printStackTrace();
  30.          }
  31.       }
  32.  
  33.       runnableCanvasTable.put(var1, this);
  34.       this.maybeRegisterEventDispatchThread();
  35.    }
  36.  
  37.    synchronized void addRunnableEvent(SystemEventQueueUtilities.RunnableEvent var1) {
  38.       this.runnableEvents.addElement(var1);
  39.    }
  40.  
  41.    public Graphics getGraphics() {
  42.       return nullGraphics;
  43.    }
  44.  
  45.    public Dimension getPreferredSize() {
  46.       return new Dimension(1, 1);
  47.    }
  48.  
  49.    private synchronized SystemEventQueueUtilities.RunnableEvent[] getRunnableCanvasEvents() {
  50.       int var1 = this.runnableEvents.size();
  51.       if (var1 == 0) {
  52.          return null;
  53.       } else {
  54.          SystemEventQueueUtilities.RunnableEvent[] var2 = new SystemEventQueueUtilities.RunnableEvent[var1];
  55.  
  56.          for(int var3 = 0; var3 < var1; ++var3) {
  57.             var2[var3] = (SystemEventQueueUtilities.RunnableEvent)this.runnableEvents.elementAt(var3);
  58.          }
  59.  
  60.          this.runnableEvents.removeAllElements();
  61.          return var2;
  62.       }
  63.    }
  64.  
  65.    public boolean isShowing() {
  66.       return this.runnableEvents.size() > 0;
  67.    }
  68.  
  69.    static SystemEventQueueUtilities$RunnableCanvas lookup(SystemEventQueueUtilities.RunnableEvent var0) {
  70.       if (var0.doRun instanceof SystemEventQueueUtilities.ComponentWorkRequest) {
  71.          SystemEventQueueUtilities.ComponentWorkRequest var10 = (SystemEventQueueUtilities.ComponentWorkRequest)var0.doRun;
  72.          synchronized(var10){}
  73.  
  74.          SystemEventQueueUtilities$RunnableCanvas var11;
  75.          try {
  76.             JRootPane var13 = SwingUtilities.getRootPane(var10.component);
  77.             if (var13 == null) {
  78.                var10.isPending = false;
  79.                var11 = null;
  80.                return var11;
  81.             }
  82.  
  83.             var11 = (SystemEventQueueUtilities$RunnableCanvas)runnableCanvasTable.get(var13);
  84.          } catch (Throwable var9) {
  85.             throw var9;
  86.          }
  87.  
  88.          return var11;
  89.       } else {
  90.          Object var1 = runnableCanvasTable.get(Thread.currentThread());
  91.          if (var1 != null) {
  92.             return (SystemEventQueueUtilities$RunnableCanvas)var1;
  93.          } else {
  94.             ThreadGroup var2;
  95.             try {
  96.                var2 = Thread.currentThread().getThreadGroup();
  97.             } catch (SecurityException var8) {
  98.                return null;
  99.             }
  100.  
  101.             SystemEventQueueUtilities$RunnableCanvas var3 = (SystemEventQueueUtilities$RunnableCanvas)runnableCanvasTable.get(var2);
  102.             if (var3 == null) {
  103.                Enumeration var4 = runnableCanvasTable.keys();
  104.                if (var4 == null) {
  105.                   return null;
  106.                }
  107.  
  108.                while(var4.hasMoreElements()) {
  109.                   Object var5 = var4.nextElement();
  110.                   if (var5 instanceof JRootPane && ((JRootPane)var5).isShowing()) {
  111.                      return (SystemEventQueueUtilities$RunnableCanvas)runnableCanvasTable.get(var5);
  112.                   }
  113.                }
  114.             }
  115.  
  116.             return var3;
  117.          }
  118.       }
  119.    }
  120.  
  121.    private void maybeRegisterEventDispatchThread() {
  122.       if (!this.isRegistered) {
  123.          synchronized(this){}
  124.  
  125.          try {
  126.             if (!this.isRegistered && SwingUtilities.isEventDispatchThread()) {
  127.                Thread var3 = Thread.currentThread();
  128.                if (runnableCanvasTable.get(var3) != null) {
  129.                   this.isRegistered = true;
  130.                } else {
  131.                   runnableCanvasTable.put(var3, this);
  132.                   runnableCanvasTable.put(SystemEventQueueUtilities.access$2(), this);
  133.                   this.isRegistered = true;
  134.                }
  135.             }
  136.          } catch (Throwable var5) {
  137.             throw var5;
  138.          }
  139.       }
  140.  
  141.    }
  142.  
  143.    public void paint(Graphics var1) {
  144.       this.maybeRegisterEventDispatchThread();
  145.    }
  146.  
  147.    static void postRunnableEventToAll(SystemEventQueueUtilities.RunnableEvent var0) {
  148.       ThreadGroup var2;
  149.       try {
  150.          var2 = (new Thread()).getThreadGroup();
  151.       } catch (SecurityException var7) {
  152.          var2 = null;
  153.       }
  154.  
  155.       SystemEventQueueUtilities$RunnableCanvas var1;
  156.       if (var2 != null) {
  157.          var1 = (SystemEventQueueUtilities$RunnableCanvas)runnableCanvasTable.get(var2);
  158.       } else {
  159.          var1 = null;
  160.       }
  161.  
  162.       Enumeration var3 = runnableCanvasTable.keys();
  163.  
  164.       while(var3.hasMoreElements()) {
  165.          Object var4 = var3.nextElement();
  166.          if (var4 instanceof JRootPane) {
  167.             Object var5 = runnableCanvasTable.get(var4);
  168.             if (var5 != var1) {
  169.                SystemEventQueueUtilities$RunnableCanvas var6 = (SystemEventQueueUtilities$RunnableCanvas)var5;
  170.                var6.addRunnableEvent(var0);
  171.                ((Component)var6).repaint();
  172.             }
  173.          }
  174.       }
  175.  
  176.    }
  177.  
  178.    static void remove(JRootPane var0) {
  179.       SystemEventQueueUtilities$RunnableCanvas var1 = (SystemEventQueueUtilities$RunnableCanvas)runnableCanvasTable.get(var0);
  180.       if (var1 != null) {
  181.          SystemEventQueueUtilities$RunnableCanvas var2 = null;
  182.          JLayeredPane var3 = var0.getLayeredPane();
  183.          ((Container)var3).remove(var1);
  184.          Enumeration var4 = runnableCanvasTable.keys();
  185.  
  186.          while(var4.hasMoreElements()) {
  187.             Object var5 = var4.nextElement();
  188.             Object var6 = runnableCanvasTable.get(var5);
  189.             if (var1 == var6) {
  190.                runnableCanvasTable.remove(var5);
  191.             } else if (var2 == null) {
  192.                var2 = (SystemEventQueueUtilities$RunnableCanvas)var6;
  193.             }
  194.          }
  195.  
  196.          SystemEventQueueUtilities.RunnableEvent[] var9 = var1.getRunnableCanvasEvents();
  197.          int var10 = var9 == null ? 0 : var9.length;
  198.          if (var10 > 0) {
  199.             if (var2 != null) {
  200.                for(int var7 = 0; var7 < var10; ++var7) {
  201.                   SystemEventQueueUtilities.RunnableEvent var8 = var9[var7];
  202.                   if (var8.doRun instanceof Timer.DoPostEvent) {
  203.                      var2.addRunnableEvent(var8);
  204.                   }
  205.                }
  206.  
  207.                ((Component)var2).repaint();
  208.             } else {
  209.                for(int var11 = 0; var11 < var10; ++var11) {
  210.                   SystemEventQueueUtilities.RunnableEvent var12 = var9[var11];
  211.                   if (var12.doRun instanceof Timer.DoPostEvent) {
  212.                      ((Timer.DoPostEvent)var12.doRun).getTimer().eventQueued = false;
  213.                   }
  214.                }
  215.             }
  216.          }
  217.       }
  218.  
  219.    }
  220.  
  221.    public void update(Graphics var1) {
  222.       SystemEventQueueUtilities.RunnableEvent[] var2 = this.getRunnableCanvasEvents();
  223.       if (var2 != null) {
  224.          for(int var3 = 0; var3 < var2.length; ++var3) {
  225.             SystemEventQueueUtilities.access$1(var2[var3]);
  226.          }
  227.       }
  228.  
  229.    }
  230. }
  231.